Many processing systems manage memory explicitly by allowing applications to expressly allocate and de-allocate buffers in the memory. For instance, applications allocate memory by requesting and receiving pointers to memory buffers from a processing system, and de-allocate the memory buffers by passing the pointers back to the processing system. Often, however, applications fail to de-allocate the memory buffers resulting in memory leakage, or a reduction in available memory for the processing systems.
In another memory management scheme, processing systems actively manage their memory by allowing applications indirect control over the memory. For instance, a processing system may provide an application with a variable corresponding to a block of memory, as opposed to address pointers to specific buffers in the memory, and automatically determine when to release the variable from the application. Since the actual memory buffers associated with the variable are hidden from the application, the processing system attains the ability to automatically relocate the memory block among various memory buffers, for example, with the memory management daemon or garbage collector, without notifying the associated application of the relocation.
Although the managed memory environment reduces, if not eliminates, memory leakage in processing systems, certain applications, such as asynchronous data streaming, require that memory buffers remain static throughout a duration of memory access operations. Since conventional processing systems operating a managed memory environment do not statically allocate memory buffers, these applications either fail to perform or are performed inefficiently.